package cn.demoncat.util.pay.cmb.entity;

import com.alibaba.fastjson.annotation.JSONField;
import lombok.Data;

import java.math.BigDecimal;
import java.util.List;

/**
 * 流水结果
 *
 * @author 延晓磊
 * @since 2024年11月01日
 */
@Data
public class CmbLogResult {

    // 合计
    @JSONField(name = "TRANSQUERYBYBREAKPOINT_Z1")
    private List<Z1> TRANSQUERYBYBREAKPOINT_Z1;
    // 列表
    @JSONField(name = "TRANSQUERYBYBREAKPOINT_Z2")
    private List<Z2> TRANSQUERYBYBREAKPOINT_Z2;
    // 续查参数
    @JSONField(name = "TRANSQUERYBYBREAKPOINT_Y1")
    private List<Y1> TRANSQUERYBYBREAKPOINT_Y1;

    /**
     * 合计
     */
    @Data
    public static class Z1{

        // 是否需要续传：Y/N
        private String ctnFlag;
        // 续传号
        private String queryAcctNbr;
        // 出笔数
        private Integer debitNums;
        // 出金额：负数
        private BigDecimal debitAmount;
        // 进笔数
        private Integer creditNums;
        // 进金额：正数
        private BigDecimal creditAmount;

        // 是否需要续传
        public boolean hasMore(){
            return "Y".equals(ctnFlag);
        }
    }

    /**
     * 列表
     */
    @Data
    public static class Z2{

        // 交易日：yyyyMMdd
        private String transDate;
        // 流水号
        private String transSequenceIdn;
        // 交易时间：hhmmss
        private String transTime;
        // 交易金额：支出为负，收入为正
        private BigDecimal transAmount;
        // 余额
        private BigDecimal acctOnlineBal;
        // 备注：支付时的摘要（用于业务备注）
        private String businessText;
        // 用途：支付时的用途，收款时的摘要
        private String remarkTextClt;
        // 收/付款方账号
        private String ctpAcctNbr;
        // 收/付款方名称
        private String ctpAcctName;
        // 收/付款方开户行
        private String ctpBankName;
        // 业务名称：支付
        private String businessName;
        // 借贷码：D支出，C收入
        private String loanCode;
        // 唯一编号
        private String yurRef;

        /**
         * 是否为收入
         *
         * @return
         */
        public boolean isIncome(){
            return "C".equals(loanCode);
        }
    }

    /**
     * 续传参数
     */
    @Data
    public static class Y1{
        // 账号
        private String acctNbr;
        // 交易日期
        private String transDate;
        // 期望下一记账序号
        private String expectNextSequence;
    }
}
